"""
def test():
    yield 1,2,3
    
t=test()
print(t)
#<generator object test at 0x01B77A48>
#生成器对象的意思


#我们在函数中使用这个yield关键字，那么这个函数就是一个生成器函数

#t存放的是生成器对象的信息
#yield的作用类似于return 将值返回到调用的地方

#我们如何获取这个1呢？

#next(生成器对象)

#(1, 2, 3)

#yied返回的内容我们需要通过next()进行一个获取的操作
"""
"""
def test():
    yield 1,2,3
    print('abc')
    yield 'a'
t=test()
print(t)

print(next(t))
#(1, 2, 3)
print(next(t))
'''
abc
a
'''
"""
"""
def testa():
    for i in range(1,10):
        yield i

t1=testa()
#获取yield返回值的方式：next()
print(next(t1))
#每次获取一个值，有多少个值就获取多少次
print(next(t1))
print(next(t1))
print(next(t1))
print(next(t1))
print(next(t1))
print(next(t1))
'''
1
2
3
4
5
6
7
'''
#如果我们超出了了的话就是会报错了
#因为最后一个yield后面没有数据了



t2=testa()
#获取yield返回值的方法二
for n in t2:
    print(n)

#我们通过for循环能够一次性拿完

#我们通过next()的时候我们需要的时候就可以进行调用，想拿几个就拿几个

print(next(t1))
#8
#我们需要用的时候就进行调用一下，不用就放着
"""


'''在不改动函数的情况下，给函数添加内容
装饰器的定义：
1.嵌套函数
2.外函数返回内函数名
3.外函数中定义一个形参，形参用来接受被装饰的函数名信息
4.要添加的额外功能，写在内函数中

调用函数：函数名()

使用装饰器：@装饰器名（外部函数名）
'''
"""
#定义装饰器
def funa(name):
    def funb():
        print('---开始执行函数---')
        #在这个中间执行被装饰的函数
        name()#这个形参是用来接受这个被装饰的函数名的信息
        '''
        name=testc
        name()=testc()
        '''

        print('---函数执行完毕---')
    return funb

#被装饰的函数
@funa
def testc():
    print('执行testc函数')

testc()

'''
---开始执行函数---
执行testc函数
---函数执行完毕---






'''
@funa
def testd():
    print('执行testd函数')
testd()
'''
---开始执行函数---
执行testd函数
---函数执行完毕--
'''


"""
"""
def log(u):
    def aaa(name,pwd):
        d={'123456':{'pwd':'1234'},
              '1234567':{'pwd':'12345'}
             }
        if name in d:
            if pwd==d[name]['pwd']:
                print("登录成功")
                #调用被装饰的函数
                u(name,pwd)#外部参数的形参是u
            else:
                print("密码错误")
            
        else:
            print("用户不存在")
    return aaa


#取款
@log
def get_money(name,pwd):
    print(f"取款1000")
#查询
def set_money(name,pwd):
    print(f"存款1000")



get_money('1256','1234')

#通过装饰器我们能减少代码冗余的效果
"""
"""
num=input("请输入一个整数")

#异常解决方案一：添加容错代码
if num.isdigit():#判断字符串是否都是数字
    num=int(num)
else:
    print('输入的不是整数')

#异常解决方案二：捕获异常
try:
    #可能会报错的语句
    num=int(num)
except ValueError:#except异常类型---捕获对应的异常类型
    #捕获到异常，处理的语句
    print(f"输入{num}不是整型")
#报错的默认信息
except ValueError as v:#接受捕获的异常的报错信息
    print(v)
    
#invalid literal for int() with base 10: '1.5'


def test():
    tel=input("请输入手机号码")
    if not(tel.isdigit() and len(tel)==11):
        raise ValueError("请输入正确的11位手机号码")
        
try:
    test()
except Exception as e:
    print(e)
print(1234)

#用except捕获到异常之后我们就在后面进行处理，提醒出现的异常

#多个expect的关系是或的关系，他们只会执行一个的
"""
"""
try:
    n=input("请输入数字")
    assert n.isdigit(),'只能输入数字'
    #断言异常的话就会提示后面的错误信息的
except AssertionError as a:
    print(a)
print('6')
"""














































































































































































































